{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"A Simple Demo for LSTM Pre-Training,\n",
    "For consistency and convenience in the workflow, \n",
    "Conv-LSTM or 3D-UNet can be directly used as substitutes.\n",
    "\"\"\"\n",
    "\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torch.utils.data import DataLoader, Subset\n",
    "import src # The old package import method, which has been rewritten in the new work project, is only for demo presentation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_dataset(npz_paths, window_input_size, stride=1):\n",
    "    if isinstance(npz_paths, str):\n",
    "        npz_paths = [npz_paths]\n",
    "    cnn_out_list = []\n",
    "    raw_time_uf_list = []\n",
    "    raw_dataset_list = []\n",
    "    min_vals_list = []\n",
    "    max_vals_list = []\n",
    "    \n",
    "    for npz_path in npz_paths:\n",
    "        loaded_data = np.load(npz_path)\n",
    "        cnn_out_list.append(loaded_data['cnn_out'])\n",
    "        raw_time_uf_list.append(loaded_data['raw_time'])\n",
    "        raw_dataset_list.append(loaded_data['raw_dataset'])\n",
    "        min_vals_list.append(loaded_data['min_vals'])\n",
    "        max_vals_list.append(loaded_data['max_vals'])\n",
    "    \n",
    "    cnn_out = np.concatenate(cnn_out_list, axis=0)\n",
    "    raw_time_uf = np.concatenate(raw_time_uf_list, axis=0)\n",
    "    raw_dataset = np.concatenate(raw_dataset_list, axis=0)\n",
    "    min_vals = np.concatenate(min_vals_list, axis=0)\n",
    "    max_vals = np.concatenate(max_vals_list, axis=0)\n",
    "    \n",
    "    raw_time = raw_time_uf.flatten()\n",
    "    time_diff = np.diff(raw_time).astype('timedelta64[s]').astype(int)\n",
    "    discontinuity_indices = np.where(time_diff != 21600)[0]\n",
    "    segment_indices = np.concatenate(([0], discontinuity_indices + 1, [len(raw_time)]))\n",
    "    \n",
    "    year_progress = src.get_year_progress(raw_time_uf)\n",
    "    day_progress = src.get_day_progress(raw_time_uf)\n",
    "    year_sin, year_cos = src.get_feature_progress(year_progress)\n",
    "    day_sin, day_cos = src.get_feature_progress(day_progress)\n",
    "    time_info = np.concatenate([year_sin, year_cos, day_sin, day_cos], axis=-1)\n",
    "    \n",
    "    data_to_segments = np.concatenate([cnn_out, time_info], axis=-1)\n",
    "    \n",
    "    segments = []\n",
    "    for start, end in zip(segment_indices[:-1], segment_indices[1:]):\n",
    "        segments.append((data_to_segments[start:end],raw_dataset[start:end]))\n",
    "    \n",
    "    window_size = window_input_size + 1\n",
    "    windowed_segments = []\n",
    "    for data, raw_data in segments:\n",
    "        for start in range(0, len(data) - window_size + 1, stride):\n",
    "            end = start + window_size\n",
    "            windowed_segments.append((data[start:end], raw_data[start:end]))\n",
    "    return windowed_segments, min_vals, max_vals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "npz_path = ['....2016_for_train.npz', '.....2017_for_train.npz']\n",
    "window_input_size = 12\n",
    "windowed_segments, min_vals, max_vals = get_dataset(npz_path, window_input_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_set_random_seed = 470166\n",
    "dataset = src.TimeSeriesDataset(windowed_segments, seed=data_set_random_seed)\n",
    "\n",
    "train_ratio = 0.8\n",
    "val_ratio = 0.1\n",
    "test_ratio = 0.1\n",
    "\n",
    "n_total = len(dataset)\n",
    "n_train = int(train_ratio * n_total)\n",
    "n_val = int(val_ratio * n_total)\n",
    "n_test = n_total - n_train - n_val\n",
    "\n",
    "indices = np.arange(n_total)\n",
    "train_indices = indices[:n_train]\n",
    "val_indices = indices[n_train:n_train+n_val]\n",
    "test_indices = indices[n_train+n_val:]\n",
    "\n",
    "train_dataset = Subset(dataset, train_indices)\n",
    "val_dataset = Subset(dataset, val_indices)\n",
    "test_dataset = Subset(dataset, test_indices)\n",
    "\n",
    "train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)\n",
    "val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)\n",
    "test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)\n",
    "\"\"\"This might cause time leakage during pre-training;\n",
    "ensure that the pre-training scope is less than or equal to \n",
    "the end time range of the training set used in the subsequent formal training.\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# After Training\n",
    "torch.save(model.state_dict(), './model/PreLSTM_2.pth')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "\n",
    "input_size = 2052\n",
    "hidden_size = 1024\n",
    "num_layers = 1\n",
    "\n",
    "model = src.LSTMModel(input_size, hidden_size, num_layers).to(device)\n",
    "\n",
    "model.load_state_dict(torch.load('./model/PreLSTM_2.pth'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "idx_list = []\n",
    "outputs_list = []\n",
    "\n",
    "with torch.no_grad():\n",
    "    for data, idx in test_loader:\n",
    "        inputs, targets = data\n",
    "        inputs = inputs.to(device)\n",
    "        targets = targets.to(device)\n",
    "        outputs = model(inputs)\n",
    "        \n",
    "        idx = idx.cpu().numpy()\n",
    "        outputs = outputs.cpu().numpy()\n",
    "        \n",
    "        idx_list.append(idx)\n",
    "        outputs_list.append(outputs)\n",
    "\n",
    "tot_idx = np.concatenate(idx_list)\n",
    "tot_output = np.concatenate(outputs_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABJAAAAHqCAYAAABbUbQpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAACTW0lEQVR4nOzde3hU1fn//c9kkkwOJIFAQhIJB5FyFhEQREQUjARFUrV4aEEUWnzkaKrWVKlYW0LVIlUEbX8YVAT5YkTwhGIlIJVYQBDQiqmgRElAERIIJJPM7OcPzNQxZ11JZjLvl9e+LmfP2nfWnuPNPWutbbMsyxIAAAAAAABQg6Dm7gAAAAAAAAB8GwUkAAAAAAAA1IoCEgAAAAAAAGpFAQkAAAAAAAC1ooAEAAAAAACAWlFAAgAAAAAAQK0oIAEAAAAAAKBWFJAAAAAAAABQKwpIAAAAAAAAqBUFJAAAAAAAANSKAhJatGXLlslms2n79u3N3ZUqOnfurEmTJtW7fXl5uRISEmSz2fTiiy82XscMePbZZxUXF6cTJ0549nXu3Fk2m82zRUZG6vzzz9eiRYtkWVaj9mfu3Lmy2Wy1tunfv7/OOussuVyuGttcdNFFateunZxOZ73+7ueffy6bzaZly5Y1pLsNNmHCBKWlpTXq3wAANC9ymuZRn5ymVatWGjx4sJ599tkm6VPla+Hzzz/37BsxYoRGjBjR4Fjz5s3Tyy+/XGV/Tk6ObDabcnJyfnQ/G6q8vFzt27fXkCFDamzjdrvVsWNHnXvuufWO21TnMnz4cM2ePbtR/wbQ3CggAX7i1Vdf1eHDhyVJS5cubebe1OzUqVP6/e9/r9/97neKioryuu+iiy7S1q1btXXrVj333HOKiIjQjBkzlJmZ2Uy9/Z/Jkyfr0KFDevPNN6u9/9NPP9V7772nCRMmKDQ0tIl7V7u5c+fqtdde0zvvvNPcXQEAoE4tLaepLOjcfPPNWrJkSbP0dfHixVq8eHGDj6upgHT++edr69atOv/88w30rn5CQkI0YcIEvf/++/r444+rbfP2228rPz9fkydPbrJ+1deDDz6oxYsXa9++fc3dFaDRUEAC/MTSpUsVGhqqyy+/XG+99Za+/PLLeh136tSpRu6Zt2eeeUZHjx7VlClTqtzXunVrDRkyREOGDNE111yj119/XTExMXrqqaeatI/V+eUvf6mwsDA9/fTT1d5fuf/WW29tym7VS9euXTV69GjNnz+/ubsCAECdWlpOc91112n9+vWKjo7WggULaozncrlUVlbWKH3t1auXevXqZSxedHS0hgwZoujoaGMx66OyMFRbPhYaGqpf/epXTdmternkkkvUvXt3/fWvf23urgCNhgISIGnLli0aOXKkoqKiFBERoaFDh+q1116r0u6rr77Sb37zGyUnJys0NFRJSUm67rrrPL+ilZaW6re//a3OO+88xcTEKDY2VhdeeKHWrl37k/p36NAhrV+/XmPHjtVdd90lt9td7bSoSZMmqVWrVtqzZ49SUlIUFRWlkSNHSpKcTqf+9Kc/qUePHnI4HIqLi9Mtt9yir7/+2ivGqlWrlJKSosTERIWHh6tnz5665557VFJSUq++LlmyRGPHjlXr1q3rbBsdHa2f/exnnsevUlP19fvatGmjn//853rllVd09OhRr/tcLpeee+45DRo0SH379tV///tf3XLLLerWrZsiIiJ01llnaezYsdqzZ0+df2fSpEnq3Llzlf3VTbOzLEuLFy/Weeedp/DwcLVp00bXXXed9u/fX+X4CRMm6O2339Znn33WsBMHALQo5DT/05Q5TevWrdW9e3d98cUXkv43jf2hhx7Sn/70J3Xp0kUOh0MbN26UJG3fvl1XX321YmNjFRYWpv79++v//u//qsTNzc3VRRddpLCwMCUlJSkjI0Pl5eVV2lU3ha2srEx//OMf1bNnT4WFhalt27a69NJL9d5770mSbDabSkpK9Mwzz3im41XGqGna17p163ThhRcqIiJCUVFRuvzyy7V161avNpU5zUcffaQbb7xRMTExat++vW699VYVFRXV+jj27NlTF154oZ577jlVVFR43Xf8+HGtXbtW48aNU9u2bbV9+3bdcMMN6ty5s8LDw9W5c2fdeOONnuegNjVN+asuT6vv6006k4+tWLHCa8oj0JJQQELA27Rpky677DIVFRVp6dKlWrlypaKiojR27FitWrXK0+6rr77SoEGDtGbNGqWnp+uNN97QwoULFRMTo2PHjkk680X97bff6s4779TLL7+slStXatiwYbrmmmt+0rz4ZcuWyeVy6dZbb9WoUaPUqVMnPf3009WuHeR0OnX11Vfrsssu09q1a/XAAw/I7XZr3Lhxmj9/vm666Sa99tprmj9/vjZs2KARI0bo9OnTnuPz8vI0ZswYLV26VOvXr9fs2bP1f//3fxo7dmyd/fzyyy+1Z88eXXrppfU6r4qKCuXn5+tnP/uZZ19T9bU6kydPltPp1PLly732v/nmmzp06JDnV7FDhw6pbdu2mj9/vtavX68nnnhCwcHBGjx4sNFhy1OnTtXs2bM1atQovfzyy1q8eLE++ugjDR06tErRbcSIEbIsS6+//rqxvw8A8C/kNM2X05SXl+uLL75QXFyc1/7HHntM77zzjh555BG98cYb6tGjhzZu3KiLLrpIx48f15NPPqm1a9fqvPPO0/XXX+9VTPv44481cuRIHT9+XMuWLdOTTz6pnTt36k9/+lOd/amoqFBqaqoefPBBXXXVVVqzZo2WLVumoUOH6uDBg5KkrVu3Kjw8XGPGjPFMx6ttGtyKFSs0btw4RUdHa+XKlVq6dKmOHTumESNGaMuWLVXaX3vttfrZz36m7Oxs3XPPPVqxYoXuuOOOOvs+efJkHTlypErhc8WKFSotLfXkY59//rm6d++uhQsX6s0339Rf/vIXFRQUaNCgQfrmm2/q/Dv10ZDXm3QmHyspKWnStaOAJmUBLVhWVpYlydq2bVuNbYYMGWLFx8dbJ06c8OyrqKiw+vTpY3Xo0MFyu92WZVnWrbfeaoWEhFgff/xxvf9+RUWFVV5ebk2ePNnq37+/132dOnWybr755jpjuN1u65xzzrHOOussq6KiwrIsy7r//vstSdY///lPr7Y333yzJcl6+umnvfavXLnSkmRlZ2d77d+2bZslyVq8eHGNf7u8vNzatGmTJcn68MMPa+3rqlWrLElWbm5ulfs6depkjRkzxiovL7fKy8utL774wvr1r39thYSEWK+++mqj9rXy8aqL2+22unTpYp177rle+6+99lorIiLCKioqqva4iooKy+l0Wt26dbPuuOMOz/4DBw5YkqysrCzPvptvvtnq1KlTlRg/7OPWrVstSdZf//pXr3b5+flWeHi4dffdd1eJcdZZZ1nXX399necJAPA/5DRn+GJOc+DAAU9/77rrLsuy/pcDdO3a1XI6nV7H9+jRw+rfv79VXl7utf+qq66yEhMTLZfLZVmWZV1//fVWeHi4VVhY6GlTUVFh9ejRw5JkHThwwLP/kksusS655BLP7WeffdaSZP3jH/+o9TwjIyOrfe42btxoSbI2btxoWZZluVwuKykpyerbt6+nf5ZlWSdOnLDi4+OtoUOHevZVPqcPPfSQV8zbb7/dCgsL87wOa3LixAmrVatW1tVXX+21f8CAAVZycrLX3/++iooK6+TJk1ZkZKT1t7/9rcZzsayqj1elH+ZpDX29OZ1Oy2azWb/73e9qPUfAXzECCQGtpKRE77//vq677jq1atXKs99ut2vChAn68ssvPSNK3njjDV166aXq2bNnrTFXr16tiy66SK1atVJwcLBCQkK0dOlS/ec///lRfdy0aZP++9//6uabb5bdbpck3XLLLbLZbDXOD7/22mu9br/66qtq3bq1xo4dq4qKCs923nnnKSEhwetXkv379+umm25SQkKC7Ha7QkJCdMkll0hSnedw6NAhSVJ8fHy197/++usKCQlRSEiIOnXqpH/84x96/PHHdeWVVzZ5X6tjs9l0yy23aPfu3dqxY4ck6ejRo3rllVd07bXXetYBqKio0Lx589SrVy+FhoYqODhYoaGhysvL+9HP8w+9+uqrstls+tWvfuX1OCQkJKhfv37V/rIVHx+vr776ysjfBwD4F3Ka5stpunTpov/7v//TjBkzqowOuvrqqxUSEuK5/d///leffPKJfvnLX0qS1zmMGTNGBQUFnudp48aNGjlypNq3b+853m636/rrr6+179KZ5zgsLMzY2o379u3ToUOHNGHCBAUF/e+fkK1atdK1116r3NzcKmtUXX311V63zz33XJWWlurIkSO1/q1WrVpp/Pjxev311z0jrvfu3asdO3Zo0qRJnr9/8uRJ/e53v9M555yj4OBgBQcHq1WrViopKTGaj9X39SadWQi8devW5GNosSggIaAdO3ZMlmUpMTGxyn1JSUmS5FkP5+uvv1aHDh1qjffSSy9p/PjxOuuss7R8+XJt3bpV27Zt06233qrS0tIf1cfKq5P8/Oc/1/Hjx3X8+HHFxMRo2LBhys7O1vHjx73aR0REVFnw8PDhwzp+/LhCQ0M9yU7lVlhY6Bnme/LkSV188cV6//339ac//Uk5OTnatm2bXnrpJUmqMkz3hyrvDwsLq/b+YcOGadu2bcrNzdVzzz2nzp07a/r06V7DnpuqrzW55ZZbFBQUpKysLEnS888/L6fT6XW1j/T0dM2ZM0dpaWl65ZVX9P7772vbtm3q16/fj/67P3T48GFZlqX27dtXeRxyc3OrHZodFhZm7O8DAPwLOU3z5DTbt2/Xxx9/rOPHj+uxxx6rcqXWHz4flQWRO++8s0r/b7/9dknynMPRo0eVkJBQ5W9Xt++Hvv76ayUlJXkVe36KytdOTa8vt9vtmf5YqW3btl63HQ6HpPrlaJMnT1ZFRYWee+45SWcWz678oa/STTfdpEWLFmnKlCl688039e9//1vbtm1TXFyc0XysPq+37yMfQ0sW3NwdAJpTmzZtFBQUpIKCgir3Vf7y1K5dO0lSXFxcnVcJWb58ubp06aJVq1Z5LYj8Y6+4UVRUpOzsbEnSoEGDqm2zYsUKT8IhqcpCzNKZc2jbtq3Wr19fbYzKS9O+8847OnTokHJycjy/0EmqktDVpPKx+vbbb6tNMGJiYjRw4EBJ0uDBgzV48GD169dPt99+u3bt2qWgoKAm62tNOnTooJSUFK1YsUJ//etflZWVpXPOOUfDhw/3tFm+fLkmTpyoefPmeR37zTff1LnQZlhYWLWvhx8mIO3atZPNZtO7777rSbi+r7p93377bbULdAMAWj5ymjOaI6epzQ/PoTJuRkaGrrnmmmqP6d69u6QzBZjCwsIq91e374fi4uK0ZcsWud1uI0WkymJQTa+voKAgtWnT5if/nUpDhw5Vz549lZWVpVmzZmn58uW67LLL1KVLF0lnXk+vvvqq7r//ft1zzz2e4yrX7qpLWFhYtQt6V5eP1ef19n3Hjh3zPM9AS8MIJAS0yMhIDR48WC+99JLXLwVut1vLly9Xhw4dPAs8p6amauPGjbUukmyz2RQaGuqVLBQWFv7oK5asWLFCp0+f1oMPPqiNGzdW2dq1a1fjkO/vu+qqq3T06FG5XC4NHDiwylaZqFT2+4fFiaeeeqpe/e3Ro4ck1ftKYN26ddPdd9+tPXv2eBb3bKq+1mby5Mk6duyY/vCHP2jXrl2e4fWVbDZblb/72muv1Wu4cufOnXXkyBGvRbCdTqfefPNNr3ZXXXWVLMvSV199Ve3j0LdvX6/2lQuSm7yELwDAf5DTNG9OU1/du3dXt27d9OGHH1bb/4EDB3qKEpdeeqn++c9/euUMLpfLa0H0mqSmpqq0tLTaK9x9n8PhqNdome7du+uss87SihUrvBY8LykpUXZ2tufKbCbdeuut+vjjj3Xffffp66+/9pqOZ7PZZFlWlef3//2//yeXy1Vn7M6dO+vTTz/1KogePXrUc4W6SvV9vVU6dOiQSktLycfQYjECCQHhnXfe0eeff15l/5gxY5SZmanLL79cl156qe68806FhoZq8eLF2rt3r1auXOlJQP74xz/qjTfe0PDhw/X73/9effv21fHjx7V+/Xqlp6erR48euuqqq/TSSy/p9ttv13XXXaf8/Hw9+OCDSkxMVF5eXoP7vXTpUrVp00Z33nlntUOoJ06cqAULFujDDz9Uv379aoxzww036Pnnn9eYMWM0a9YsXXDBBQoJCdGXX36pjRs3aty4cfr5z3+uoUOHqk2bNrrtttt0//33KyQkRM8//7w+/PDDevV38ODBCg8PV25ubpV57zW588479eSTT+qBBx7Q+PHjm6yvtbn66qvVrl07Pfzww7Lb7br55pu97r/qqqu0bNky9ejRQ+eee6527Nihhx9+uM7pAJJ0/fXX6w9/+INuuOEG3XXXXSotLdVjjz1WJdm56KKL9Jvf/Ea33HKLtm/fruHDhysyMlIFBQXasmWL+vbtq//v//v/PO13796tU6dO1ftqMQAA/0RO47s5TX099dRTSk1N1RVXXKFJkybprLPO0rfffqv//Oc/+uCDD7R69WpJ0n333ad169bpsssu0x/+8AdFREToiSeeUElJSZ1/48Ybb1RWVpZuu+027du3T5deeqncbrfef/999ezZUzfccIMkqW/fvsrJydErr7yixMRERUVFVSmKSFJQUJAeeugh/fKXv9RVV12lqVOnqqysTA8//LCOHz+u+fPnG32MpDOvid///vd6+OGH1bp1a68RW9HR0Ro+fLgefvhhtWvXTp07d9amTZu0dOnSOkeDS9KECRP01FNP6Ve/+pV+/etf6+jRo3rooYeqTJms7+utUm5uriSRj6Hlas4VvIHGVnnFkpq2yqtXvPvuu9Zll11mRUZGWuHh4daQIUOsV155pUq8/Px869Zbb7USEhKskJAQKykpyRo/frx1+PBhT5v58+dbnTt3thwOh9WzZ0/rH//4R7VXAavriiUffvihJcmaPXt2jW0++eQTS5I1Y8YMy7LOXDkiMjKy2rbl5eXWI488YvXr188KCwuzWrVqZfXo0cOaOnWqlZeX52n33nvvWRdeeKEVERFhxcXFWVOmTLE++OCDKlcTq8mECROsXr16VdnfqVMn68orr6z2mCee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",
      "text/plain": [
       "<Figure size 1200x500 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) \n",
    "\n",
    "im1 = ax1.imshow(de_tot_groudtruth[1][:,:,2], cmap='viridis', aspect='auto')\n",
    "fig.colorbar(im1, ax=ax1) \n",
    "ax1.set_title(\"Local Area (Real Value)\")\n",
    "ax1.set_xlabel(\"X-axis\")\n",
    "ax1.set_ylabel(\"Y-axis\")\n",
    "\n",
    "im2 = ax2.imshow(de_tot_output[1][:,:,2], cmap='viridis', aspect='auto')\n",
    "fig.colorbar(im2, ax=ax2)\n",
    "ax2.set_title(\"Local Area (Prediction Value)\")\n",
    "ax2.set_xlabel(\"X-axis\")\n",
    "ax2.set_ylabel(\"Y-axis\")\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
